#include <iostream>
#include <string>
#include <cstring>
#include <unistd.h>
#include <pthread.h>

using namespace std;
//添加__thread，可以将一个内置类型设置为线程局部存储
__thread int g_val = 100;

string changeId(const pthread_t& pthreadId)
{
    char tid[128];
    snprintf(tid,sizeof(tid),"0x%x",pthreadId);
    return tid;
}

void* start_routine(void* args)
{
    string name = static_cast<const char*>(args);
    // pthread_self() //获取调用该函数的线程id
    // pthread_detach(pthread_self()); //新线程自己设置自己为分离状态
    int cnt = 5;
    while(cnt--)
    {
        cout<<name <<" 正在运行... 线程ID："<<changeId(pthread_self())
        <<" g_val:" <<g_val++<<" &g_val:"<<&g_val<<endl;
        sleep(1);
    }
    return nullptr;
}
int main()
{
    pthread_t tid;
    pthread_create(&tid,nullptr,start_routine,(void*)"thread one");
    // pthread_detach(tid);    //主线程主动将新线程分离

    int cnt = 3;
    while(true)
    {
        cout<<"我是主线程，正在运行... 主线程ID："<<changeId(pthread_self()) <<" 新线程ID："<< changeId(tid)
        <<" g_val:" <<g_val++<<" &g_val:"<<&g_val<<endl;
        sleep(1);
    }
    //一个线程默认是joinable的，如果设置了分离状态，就不能再进行等待了
    // int n = pthread_join(tid,nullptr);
    // cout<< "result:" << n <<" : "<< strerror(n)<<endl;

    return 0;
}